package com.gzxx.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gzxx.domain.bo.SysMenuBO;
import com.gzxx.domain.vo.SysMenuVo;
import lombok.NonNull;

import java.util.List;

/**
 * @Author pengpdx
 * @Date 2020/7/24 12:04
 * 系统目录接口
 */
public interface SysMenuService {

    /**
     * 新增
     * @param sysMenuBO 业务实体
     * @return
     */
    boolean add(SysMenuBO sysMenuBO);

    /**
     * 根据角色唯一标识获取菜单权限
     * @param ids 角色标识
     * @return 菜单权限集合
     */
    List<String> getMenuPermsByRoleIds(@NonNull List<Long> ids);

    /**
     * 删除菜单
     * @param id
     * @return
     */
    boolean delete(@NonNull Long id);

    /**
     * 修改菜单
     * @param sysMenuBO
     * @return
     */
    boolean update(SysMenuBO sysMenuBO);

    /**
     * 根据ID查询
     * @param id
     * @return
     */
    SysMenuVo getSysMenuById(@NonNull Long id);

    /**
     * 根据条件查询
     * @param sysMenuBO
     * @return
     */
    IPage<SysMenuVo> querySysMenus(SysMenuBO sysMenuBO, int nowPage, int pageShow);

    /**
     * 根据父级ID获取所有子集
     * @param parentId
     * @return
     */
    List<SysMenuVo> queryListByParentId(@NonNull Long parentId);

    /**
     * 根据父级ID和固定子集获取对象
     * @param parentId  父级ID
     * @param menuIdList    子级ID
     * @return
     */
    List<SysMenuVo> queryListByParentId(@NonNull Long parentId, List<Long> menuIdList);

    /**
     * 根据用户获取所有授权目录
     * @param userId    用户ID
     * @return
     */
    List<SysMenuVo> getUserMenuList(Long userId);

    /**
     * 获取所有目录
     * @return
     */
    List<SysMenuVo> getAllSysMenuList(Integer type);

    /**
     * 根据名称获取目录
     * @param menuName
     * @return
     */
    SysMenuVo getSysMenuByName(@NonNull String menuName);

    /**
     * 获取所有父级id
     */
    List<Long> getParentAll();
}
